์ ์ธ๊ณ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํ์ ์ธํ๋ผ๋ฅผ ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃจ๋ ๊ฐ์ด๋. ํจํค์ง ๋งค๋์ , ๋ฒ๋ค๋ฌ, ํธ๋์คํ์ผ๋ฌ, ๋ฆฐํฐ, ํ ์คํ , CI/CD๋ฅผ ๋ชจ๋ ํฌํจํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ํ๋ ์์ํฌ: ์ต์ ์ํฌํ๋ก์ฐ ์ธํ๋ผ ๋ง์คํฐํ๊ธฐ
์ง๋ 10๋
๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋
๋น์ ์ธ ๋ณํ๋ฅผ ๊ฒช์์ต๋๋ค. ํ๋ ์ฌ์ํ ๋ธ๋ผ์ฐ์ ์ํธ์์ฉ์ ์ฌ์ฉ๋๋ ๋จ์ํ ์คํฌ๋ฆฝํ
์ธ์ด์์ ์น, ์๋ฒ, ์ฌ์ง์ด ๋ชจ๋ฐ์ผ ์ฅ์น์์ ๋ณต์กํ๊ณ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ๋ํ๋ ๊ฐ๋ ฅํ๊ณ ๋ค์ฌ๋ค๋ฅํ ์ธ์ด๋ก ๋ฐ์ ํ์ต๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐ์ ์ ์๋ก์ด ์ฐจ์์ ๋ณต์ก์ฑ์ ์ผ๊ธฐํ์ต๋๋ค. ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ ์ด์ ๋จ์ผ .js ํ์ผ์ HTML ํ์ด์ง์ ์ฐ๊ฒฐํ๋ ๊ฒ๋ง์ผ๋ก ๋๋์ง ์์ต๋๋ค. ์ ๊ตํ ๋๊ตฌ์ ํ๋ก์ธ์ค์ ์ํ๊ณ๋ฅผ ์กฐ์จํ๋ ์์
์ด ๋์์ต๋๋ค. ์ด ์กฐ์จ ๊ณผ์ ์ ์ฐ๋ฆฌ๋ ์ต์ ์ํฌํ๋ก์ฐ ์ธํ๋ผ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์ ์ธ๊ณ์ ํฉ์ด์ ธ ์๋ ๊ฐ๋ฐํ์๊ฒ ํ์คํ๋๊ณ ๊ฒฌ๊ณ ํ๋ฉฐ ํจ์จ์ ์ธ ์ํฌํ๋ก์ฐ๋ ์ฌ์น๊ฐ ์๋๋ผ ์ฑ๊ณต์ ์ํ ๊ธฐ๋ณธ ์๊ฑด์ ๋๋ค. ์ด๋ ์ฝ๋ ํ์ง์ ๋ณด์ฅํ๊ณ ์์ฐ์ฑ์ ํฅ์์ํค๋ฉฐ, ์๋ก ๋ค๋ฅธ ์๊ฐ๋์ ๋ฌธํ๊ถ ๊ฐ์ ์ํํ ํ์ ์ ์ด์งํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ ์ด๋ฌํ ์ธํ๋ผ์ ํต์ฌ ๊ตฌ์ฑ ์์์ ๋ํ ํฌ๊ด์ ์ธ ์ฌ์ธต ๋ถ์์ ์ ๊ณตํ๋ฉฐ, ์ ๋ฌธ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ฐ๋ฐ์๋ค์๊ฒ ํต์ฐฐ๋ ฅ๊ณผ ์ค์ฉ์ ์ธ ์ง์์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ฐ: ํจํค์ง ๊ด๋ฆฌ
๋ชจ๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ๊ฐ์ฅ ํต์ฌ์๋ ํจํค์ง ๋งค๋์ ๊ฐ ์์ต๋๋ค. ๊ณผ๊ฑฐ์๋ ์๋ํํฐ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์๋์ผ๋ก ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ํตํด ํฌํจ์์ผ์ผ ํ๋๋ฐ, ์ด๋ ๋ฒ์ ์ถฉ๋๊ณผ ์ ์ง๋ณด์์ ์ ๋ชฝ์ผ๋ก ๊ฐ๋ํ ๊ณผ์ ์ด์์ต๋๋ค. ํจํค์ง ๋งค๋์ ๋ ์ด ๋ชจ๋ ๊ณผ์ ์ ์๋ํํ์ฌ ์์กด์ฑ ์ค์น, ๋ฒ์ ๊ด๋ฆฌ, ์คํฌ๋ฆฝํธ ์คํ์ ์ ๋ฐํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
๊ฑฐ์ธ๋ค: npm, Yarn, and pnpm
์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๋ ๊ฐ๊ฐ ๊ณ ์ ํ ์ฒ ํ๊ณผ ๊ฐ์ ์ ๊ฐ์ง ์ธ ๊ฐ์ง ์ฃผ์ ํจํค์ง ๋งค๋์ ๊ฐ ์ง๋ฐฐํ๊ณ ์์ต๋๋ค.
-
npm (Node Package Manager): ์ต์ด์ด์ ์ฌ์ ํ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํค์ง ๋งค๋์ ์ธ npm์ ๋ชจ๋ Node.js ์ค์น ์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. npm์ ๋ชจ๋ ํ๋ก์ ํธ์ ๋ช
์ธ์์ธ
package.jsonํ์ผ์ ์ธ์์ ์๊ฐํ์ต๋๋ค. ์๋ ์ ๊ฑธ์ณ ์๋์ ์์ ์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ์ผ๋ฉฐ, ๊ฒฐ์ ๋ก ์ ์ค์น(deterministic install)๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํดpackage-lock.jsonํ์ผ์ ๋์ ํ์ต๋๋ค. ์ด๋ ํ์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ ํํ ๋์ผํ ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ๊ฐ๊ฒ ๋จ์ ์๋ฏธํฉ๋๋ค. ์ฌ์ค์์ ํ์ค์ด๋ฉฐ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ ํ์ ๋๋ค. -
Yarn: Facebook(ํ Meta)์ด npm์ ์ด๊ธฐ ์ฑ๋ฅ ๋ฐ ๋ณด์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐํ Yarn์ ์คํ๋ผ์ธ ์บ์ฑ ๋ฐ ๋ ๊ฒฐ์ ๋ก ์ ์ธ ์ ๊ธ ๋ฉ์ปค๋์ฆ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฒ์๋ถํฐ ๋์
ํ์ต๋๋ค. ์ต์ ๋ฒ์ ์ Yarn(Yarn 2+)์ Plug'n'Play(PnP)๋ผ๋ ํ์ ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋์
ํ๋๋ฐ, ์ด๋ ์์กด์ฑ์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ๋งคํํ์ฌ
node_modules๋๋ ํฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๋น ๋ฅธ ์ค์น ๋ฐ ์์ ์๊ฐ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ํ "Workspaces" ๊ธฐ๋ฅ์ ํตํด ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ๋ฅญํ๊ฒ ์ง์ํฉ๋๋ค. -
pnpm (performant npm): ํจํค์ง ๊ด๋ฆฌ ์ธ๊ณ์ ๋ ์ค๋ฅด๋ ์คํ์ธ pnpm์ ์ฃผ์ ๋ชฉํ๋
node_modulesํด๋์ ๋นํจ์จ์ฑ์ ํด๊ฒฐํ๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ํ๋ก์ ํธ์ ๊ฑธ์ณ ํจํค์ง๋ฅผ ๋ณต์ ํ๋ ๋์ , pnpm์ ๋จธ์ ์ ์ ์ญ ์ฝํ ์ธ ์ฃผ์ ์ง์ ๊ฐ๋ฅ ์ ์ฅ์์ ํจํค์ง์ ๋จ์ผ ๋ฒ์ ์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ ๋งํฌ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ก์ ํธ์node_modules๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋์คํฌ ๊ณต๊ฐ์ ๋ํญ ์ ์ฝํ๊ณ ํนํ ๋ง์ ํ๋ก์ ํธ๊ฐ ์๋ ํ๊ฒฝ์์ ์ค์น ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ํ ์๊ฒฉํ ์์กด์ฑ ํด๊ฒฐ ๋ฐฉ์์ ์ฝ๋๊ฐpackage.json์ ๋ช ์์ ์ผ๋ก ์ ์ธ๋์ง ์์ ํจํค์ง๋ฅผ ์ฐ์ฐํ ๊ฐ์ ธ์ค๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์ด๋ค ๊ฒ์ ์ ํํด์ผ ํ ๊น์? ์๋ก์ด ํ๋ก์ ํธ์๋ ํจ์จ์ฑ๊ณผ ์๊ฒฉํจ ๋๋ฌธ์ pnpm์ด ํ๋ฅญํ ์ ํ์
๋๋ค. Yarn์ ๋ณต์กํ ๋ชจ๋
ธ๋ ํฌ์ ๊ฐ๋ ฅํ๋ฉฐ, npm์ ์ฌ์ ํ ๊ฒฌ๊ณ ํ๊ณ ๋ณดํธ์ ์ผ๋ก ์ดํด๋๋ ํ์ค์ผ๋ก ๋จ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ์ด ํ๋๋ฅผ ์ ํํ๊ณ ์ด๋ฅผ ๊ณ ์ํ์ฌ ์๋ก ๋ค๋ฅธ ์ ๊ธ ํ์ผ(package-lock.json, yarn.lock, pnpm-lock.yaml) ๊ฐ์ ์ถฉ๋์ ํผํ๋ ๊ฒ์
๋๋ค.
์กฐ๊ฐ ๋ง์ถ๊ธฐ: ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋น๋ ๋๊ตฌ
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ธ ๋ชจ๋๋ก ์์ฑ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ๋ ์ญ์ฌ์ ์ผ๋ก ๋ง์ ์์ ํ์ผ์ ๋ก๋ํ๋ ๋ฐ ๋นํจ์จ์ ์ด์์ต๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ฝ๋์ ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ๋ถ์ํ๊ณ ๋ชจ๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋ช ๊ฐ์ ์ต์ ํ๋ ํ์ผ๋ก "๋ฒ๋ค๋ง"ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๋ํ ์ต์ ๋ฌธ๋ฒ ํธ๋์คํ์ผ๋ง, CSS ๋ฐ ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ํ๋ก๋์ ์ฉ ์ฝ๋ ์ต์ ํ์ ๊ฐ์ ๋ค์ํ ๋ค๋ฅธ ๋ณํ๋ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ผ๊พผ: Webpack
์๋
๋์ Webpack์ ๋
ผ์์ ์ฌ์ง๊ฐ ์๋ ๋ฒ๋ค๋ฌ์ ์์ด์์ต๋๋ค. ๊ทธ ํ์ ๊ทน๋์ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ ์์ต๋๋ค. ๋ก๋(ํ์ผ์ ๋ณํํ๋ ์์คํ
, ์: Sass๋ฅผ CSS๋ก)์ ํ๋ฌ๊ทธ์ธ(๋น๋ ํ๋ก์ธ์ค์ ๊ฐ์
ํ์ฌ ์ถ์์ ๊ฐ์ ์์
์ ์ํ) ์์คํ
์ ํตํด Webpack์ ๊ฑฐ์ ๋ชจ๋ ์์ฐ์ด๋ ๋น๋ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์ฐ์ฑ์๋ ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ์ด ๋ฐ๋ฆ
๋๋ค. ๊ตฌ์ฑ ํ์ผ์ธ webpack.config.js๋ ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค. ์๋ก์ด ๋๊ตฌ์ ๋ถ์์๋ ๋ถ๊ตฌํ๊ณ Webpack์ ์ฑ์๋์ ๋ฐฉ๋ํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ ๋ณต์กํ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ ํ ์ ํจํฉ๋๋ค.
์๋์ ํ์์ฑ: Vite
Vite(ํ๋์ค์ด๋ก "๋น ๋ฅด๋ค"๋ ์๋ฏธ)๋ ํ๋ก ํธ์๋ ์ธ๊ณ๋ฅผ ๊ฐํํ ์ฐจ์ธ๋ ๋น๋ ๋๊ตฌ์ ๋๋ค. ํต์ฌ ํ์ ์ ๊ฐ๋ฐ ์ค์ ๋ธ๋ผ์ฐ์ ์์ ๋ค์ดํฐ๋ธ ES ๋ชจ๋(ESM)์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์์ํ๊ธฐ ์ ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค๋งํ๋ Webpack๊ณผ ๋ฌ๋ฆฌ Vite๋ ์์ฒญ ์ ํ์ผ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์์ ์๊ฐ์ด ๊ฑฐ์ ์ฆ๊ฐ์ ์ด๋ฉฐ, ํซ ๋ชจ๋ ๊ต์ฒด(HMR)โ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ๋ณ๊ฒฝ ์ฌํญ์ด ๋ธ๋ผ์ฐ์ ์ ๋ฐ์๋๋ ๊ฒโ๊ฐ ์์ฒญ๋๊ฒ ๋น ๋ฅด๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ๋ก๋์ ๋น๋์ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก ๊ณ ๋๋ก ์ต์ ํ๋ Rollup ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ์ฝ๋๊ฐ ์๊ณ ํจ์จ์ ์์ ๋ณด์ฅํฉ๋๋ค. Vite์ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ๊ณผ ๊ฐ๋ฐ์ ์นํ์ ์ธ ๊ฒฝํ์ Vue๋ฅผ ํฌํจํ ๋ง์ ์ต์ ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ์ ํ์ด ๋์์ผ๋ฉฐ React ๋ฐ Svelte์์๋ ์ธ๊ธฐ ์๋ ์ต์ ์ ๋๋ค.
๊ธฐํ ์ฃผ์ ํ๋ ์ด์ด: Rollup๊ณผ esbuild
Webpack๊ณผ Vite๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ ๋๋ ๋ฐ๋ฉด, ๋ค๋ฅธ ๋๊ตฌ๋ค์ ํน์ ํ์ ์์ฅ์์ ๋ฐ์ด๋ฉ๋๋ค:
- Rollup: Vite์ ํ๋ก๋์ ๋น๋๋ฅผ ๊ตฌ๋ํ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. Rollup์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ ์ ๋๊ณ ์ค๊ณ๋์์ต๋๋ค. ํนํ ESM ํ์์ผ๋ก ์์ ํ ๋ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค์ธ ํธ๋ฆฌ ์ ฐ์ดํน(tree-shaking)์ ํ์ํฉ๋๋ค. npm์ ๊ฒ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ Rollup์ด ์ข ์ข ์ต์์ ์ ํ์ ๋๋ค.
- esbuild: ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ esbuild๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ ๊ฒฝ์ ๋๊ตฌ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค. ์ฃผ์ ์ด์ ์ ์๋์ ๋๋ค. ์์ฒด์ ์ผ๋ก๋ ์ ๋ฅํ ๋ฒ๋ค๋ฌ์ด์ง๋ง, ์ง์ ํ ํ์ ๋ค๋ฅธ ๋๊ตฌ ๋ด์์ ๊ตฌ์ฑ ์์๋ก ์ฌ์ฉ๋ ๋ ๋ฐํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, Vite๋ ์์กด์ฑ์ ์ฌ์ ๋ฒ๋ค๋งํ๊ณ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ํธ๋์คํ์ผ๋งํ๋ ๋ฐ esbuild๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๊ฒ์ด Vite์ ๋๋ผ์ด ์๋์ ์ฃผ๋ ์ด์ ์ค ํ๋์ ๋๋ค.
๋ฏธ๋์ ๊ณผ๊ฑฐ ์ฐ๊ฒฐํ๊ธฐ: ํธ๋์คํ์ผ๋ฌ
์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด(ECMAScript)๋ ๋งค๋ ๋ฐ์ ํ์ฌ ์๋กญ๊ณ ๊ฐ๋ ฅํ ๊ตฌ๋ฌธ๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค. ํธ๋์คํ์ผ๋ฌ๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ ๊ด๋ฒ์ํ ํ๊ฒฝ์์ ์คํ๋ ์ ์๋๋ก ๋ ์ค๋๋๊ณ ๋๋ฆฌ ์ง์๋๋ ๋ฒ์ (์: ES5)์ผ๋ก ๋ค์ ์์ฑํ๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํธํ์ฑ์ ํฌ์ํ์ง ์๊ณ ์ต์ฒจ๋จ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ค: Babel
Babel์ ์๋ฐ์คํฌ๋ฆฝํธ ํธ๋์คํ์ผ๋ง์ ์ฌ์ค์ ํ์ค์
๋๋ค. ํ๋ถํ ํ๋ฌ๊ทธ์ธ๊ณผ ํ๋ฆฌ์
์ํ๊ณ๋ฅผ ํตํด ๋ฐฉ๋ํ ์ข
๋ฅ์ ์ต์ ๊ตฌ๋ฌธ์ ๋ณํํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ตฌ์ฑ์ @babel/preset-env๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก, ์ด๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋์ ๋ธ๋ผ์ฐ์ ์งํฉ์ ์ง์ํ๋ ๋ฐ ํ์ํ ๋ณํ๋ง ์ง๋ฅ์ ์ผ๋ก ์ ์ฉํฉ๋๋ค. Babel์ ๋ํ React๊ฐ UI ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ๋ JSX์ ๊ฐ์ ๋นํ์ค ๊ตฌ๋ฌธ์ ๋ณํํ๋ ๋ฐ ํ์์ ์
๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ์ ๋ถ์
ํ์
์คํฌ๋ฆฝํธ๋ Microsoft์์ ๊ฐ๋ฐํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์งํฉ(superset)์
๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ ๊ฐ๋ ฅํ ์ ์ ํ์
์์คํ
์ ์ถ๊ฐํฉ๋๋ค. ์ฃผ๋ ๋ชฉ์ ์ ํ์
์ ์ถ๊ฐํ๋ ๊ฒ์ด์ง๋ง, ํ์
์คํฌ๋ฆฝํธ(๋ฐ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ)๋ฅผ ์ด์ ๋ฒ์ ์ผ๋ก ์ปดํ์ผํ ์ ์๋ ์์ฒด ํธ๋์คํ์ผ๋ฌ(tsc)๋ ํฌํจํฉ๋๋ค. ํ์
์คํฌ๋ฆฝํธ์ ์ด์ ์ ๋๊ท๋ชจ์ ๋ณต์กํ ํ๋ก์ ํธ, ํนํ ๊ธ๋ก๋ฒ ํ์๊ฒ๋ ์์ฒญ๋ฉ๋๋ค:
- ์กฐ๊ธฐ ์ค๋ฅ ๊ฐ์ง: ํ์ ์ค๋ฅ๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ๋ฐํ์์ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๋ฐ ์ค์ ๋ฐ๊ฒฌ๋ฉ๋๋ค.
- ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํฅ์: ํ์ ์ ๋ฌธ์ ์ญํ ์ ํ์ฌ ์๋ก์ด ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ํฉ๋๋ค.
- ํฅ์๋ ๊ฐ๋ฐ์ ๊ฒฝํ: ์ฝ๋ ํธ์ง๊ธฐ๋ ์ง๋ฅ์ ์ธ ์๋ ์์ฑ, ๋ฆฌํฉํ ๋ง ๋๊ตฌ ๋ฐ ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์์ฐ์ฑ์ ๊ทน์ ์ผ๋ก ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ค๋๋ Vite๋ Webpack๊ณผ ๊ฐ์ ๋๋ถ๋ถ์ ์ต์ ๋น๋ ๋๊ตฌ๋ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ํํ๊ฒ ์ต๊ณ ์์ค์ผ๋ก ์ง์ํ๋ฏ๋ก ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฝ๊ฒ ๋์ ํ ์ ์์ต๋๋ค.
ํ์ง ๊ฐ์ : ๋ฆฐํฐ์ ํฌ๋งทํฐ
๋ค์ํ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ ๋ ์ผ๊ด๋ ์คํ์ผ์ ์ ์งํ๊ณ ์ผ๋ฐ์ ์ธ ํจ์ ์ ํผํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฆฐํฐ์ ํฌ๋งทํฐ๋ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ฌ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ํธ์: ESLint
ESLint๋ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ ์ ์ ๋ถ์ ๋๊ตฌ์
๋๋ค. ์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ๋ํด ๋ณด๊ณ ํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ์คํ์ผ ๋ฌธ์ (์: "์๋ฐ์ดํ ๋์ ํ๋ฐ์ดํ ์ฌ์ฉ")์์ ์ฌ๊ฐํ ์ ์ฌ์ ๋ฒ๊ทธ(์: "๋ณ์๊ฐ ์ ์๋๊ธฐ ์ ์ ์ฌ์ฉ๋จ")์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํฉ๋๋ค. ๊ทธ ํ์ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฐ ์ํคํ
์ฒ์์ ๋์ต๋๋ค. ํ๋ ์์ํฌ(React, Vue), ํ์
์คํฌ๋ฆฝํธ, ์ ๊ทผ์ฑ ๊ฒ์ฌ ๋ฑ์ ์ํ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค. ํ์ Airbnb๋ Google๊ณผ ๊ฐ์ ์ธ๊ธฐ ์๋ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ฑํํ๊ฑฐ๋ .eslintrc ๊ตฌ์ฑ ํ์ผ์์ ์์ฒด ์ฌ์ฉ์ ์ง์ ๊ท์น ์งํฉ์ ์ ์ํ ์ ์์ต๋๋ค.
์คํ์ผ๋ฆฌ์คํธ: Prettier
ESLint๋ ์ผ๋ถ ์คํ์ผ ๊ท์น์ ๊ฐ์ ํ ์ ์์ง๋ง, ์ฃผ๋ ์๋ฌด๋ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ก์๋ด๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ฉด์ Prettier๋ ๋ ๋จ์ ์ธ(opinionated) ์ฝ๋ ํฌ๋งทํฐ์ ๋๋ค. ๊ทธ ์ญํ ์ ๋จ ํ๋, ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ์ผ๊ด๋ ๊ท์น ์งํฉ์ ๋ฐ๋ผ ๋ค์ ์ถ๋ ฅํ๋ ๊ฒ์ ๋๋ค. ๋ ผ๋ฆฌ๋ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์ค์ง ๋ ์ด์์โ์ค ๊ธธ์ด, ๋ค์ฌ์ฐ๊ธฐ, ๋ฐ์ดํ ์คํ์ผ ๋ฑโ์๋ง ์ ๊ฒฝ ์๋๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ ๋๊ตฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ESLint๋ ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ณ , Prettier๋ ๋ชจ๋ ์์ ์ง์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ์กฐํฉ์ ์ฝ๋ ์คํ์ผ์ ๋ํ ๋ชจ๋ ํ์ ๋ ผ์์ ์์ ์ค๋๋ค. ์ฝ๋ ํธ์ง๊ธฐ์์ ์ ์ฅ ์ ์๋์ผ๋ก ์คํ๋๋๋ก ํ๊ฑฐ๋ ์ฌ์ ์ปค๋ฐ ํ (pre-commit hook)์ผ๋ก ๊ตฌ์ฑํจ์ผ๋ก์จ, ๋๊ฐ ์ด๋์ ์ฝ๋๋ฅผ ์์ฑํ๋์ง์ ๊ด๊ณ์์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ค์ด๊ฐ๋ ๋ชจ๋ ์ฝ๋๊ฐ ๋์ผํ ํ์ค์ ์ค์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ ๊ฐ ์๊ฒ ๊ตฌ์ถํ๊ธฐ: ์๋ํ๋ ํ ์คํ
์๋ํ๋ ํ ์คํ ์ ์ ๋ฌธ์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ธฐ๋ฐ์ ๋๋ค. ์ด๋ ํ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๋ณดํธ๋๋ค๋ ํ์ ์ ๊ฐ์ง๊ณ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ , ๋ฒ๊ทธ๋ฅผ ์์ ํ ์ ์๋๋ก ํ๋ ์์ ๋ง์ ์ ๊ณตํฉ๋๋ค. ํฌ๊ด์ ์ธ ํ ์คํ ์ ๋ต์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๊ณ์ธต์ ํฌํจํฉ๋๋ค.
๋จ์ & ํตํฉ ํ ์คํ : Jest์ Vitest
๋จ์ ํ ์คํธ๋ ๊ฐ์ฅ ์์ ์ฝ๋ ์กฐ๊ฐ(์: ๋จ์ผ ํจ์)์ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์ ์ ๋ง์ถฅ๋๋ค. ํตํฉ ํ ์คํธ๋ ์ฌ๋ฌ ๋จ์๊ฐ ํจ๊ป ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํฉ๋๋ค. ์ด ๊ณ์ธต์์๋ ๋ ๊ฐ์ง ๋๊ตฌ๊ฐ ์ง๋ฐฐ์ ์ ๋๋ค:
- Jest: Facebook์์ ๋ง๋ Jest๋ "์ฌ์ธ์" ํ
์คํ
ํ๋ ์์ํฌ์
๋๋ค. ํ
์คํธ ๋ฌ๋, ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
expect(sum(1, 2)).toBe(3)์ ๊ฐ์ ๊ฒ์ฌ๋ฅผ ์ํจ), ๊ฐ๋ ฅํ ๋ชจํน ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค. ๊ฐ๋จํ API์ ์ค๋ ์ท ํ ์คํ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ ๋๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํ ์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ ํ์ด ๋์์ต๋๋ค. - Vitest: Vite์ ์ํํ๊ฒ ์๋ํ๋๋ก ์ค๊ณ๋ ์ต์ ๋์์ ๋๋ค. Jest์ ํธํ๋๋ API๋ฅผ ์ ๊ณตํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฉ์ดํ์ง๋ง, Vite์ ์ํคํ ์ฒ๋ฅผ ํ์ฉํ์ฌ ๋๋ผ์ด ์๋๋ฅผ ์๋ํฉ๋๋ค. ๋น๋ ๋๊ตฌ๋ก Vite๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, Vitest๋ ๋จ์ ๋ฐ ํตํฉ ํ ์คํ ์ ์ํ ์์ฐ์ค๋ฝ๊ณ ๊ฐ๋ ฅํ๊ฒ ์ถ์ฒ๋๋ ์ ํ์ ๋๋ค.
์ข ๋จ๊ฐ(E2E) ํ ์คํ : Cypress์ Playwright
E2E ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํ ์ค์ ์ฌ์ฉ์์ ์ฌ์ ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ์ค์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ด ๋ฒํผ์ ํด๋ฆญํ๊ณ , ์์์ ์์ฑํ๋ฉฐ, ํ๋ก ํธ์๋์์ ๋ฐฑ์๋๊น์ง ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- Cypress: ๋ฐ์ด๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ผ๋ก ์ ๋ช ํฉ๋๋ค. ํ ์คํธ๊ฐ ๋จ๊ณ๋ณ๋ก ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ ์ค์๊ฐ GUI๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ธ์ ๋ ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๊ฒ์ฌํ๊ณ ์คํจ๋ฅผ ์ฝ๊ฒ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด E2E ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ด์ ๋๊ตฌ๋ค๋ณด๋ค ํจ์ฌ ๋ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
- Playwright: Microsoft์ ๊ฐ๋ ฅํ ์คํ ์์ค ๋๊ตฌ์ ๋๋ค. ํต์ฌ ์ฅ์ ์ ๋ฐ์ด๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ์ง์์ผ๋ก, ๋์ผํ ํ ์คํธ๋ฅผ Chromium(Google Chrome, Edge), WebKit(Safari), Firefox์ ๋ํด ์คํํ ์ ์์ต๋๋ค. ์๋ ๋๊ธฐ, ๋คํธ์ํฌ ๊ฐ๋ก์ฑ๊ธฐ, ํ ์คํธ ์คํ ๋น๋์ค ๋ นํ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ํธํ์ฑ์ ๋ณด์ฅํ๋ ๋งค์ฐ ๊ฒฌ๊ณ ํ ์ ํ์ ๋๋ค.
ํ๋ฆ ์๋ํ: ํ์คํฌ ๋ฌ๋์ CI/CD
ํผ์ฆ์ ๋ง์ง๋ง ์กฐ๊ฐ์ ์ด ๋ชจ๋ ๊ฐ๋ณ์ ์ธ ๋๊ตฌ๋ค์ด ์ํํ๊ฒ ํจ๊ป ์๋ํ๋๋ก ์๋ํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ํ์คํฌ ๋ฌ๋์ ์ง์์ ํตํฉ/์ง์์ ๋ฐฐํฌ(CI/CD) ํ์ดํ๋ผ์ธ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค.
์คํฌ๋ฆฝํธ์ ํ์คํฌ ๋ฌ๋
๊ณผ๊ฑฐ์๋ Gulp๋ Grunt์ ๊ฐ์ ๋๊ตฌ๋ค์ด ๋ณต์กํ ๋น๋ ์์
์ ์ ์ํ๋ ๋ฐ ์ธ๊ธฐ๊ฐ ์์์ต๋๋ค. ์ค๋๋ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์๋ package.json ํ์ผ์ scripts ์น์
๋ง์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค. ํ๋ค์ ๊ณตํต ์์
์ ์คํํ๊ธฐ ์ํ ๊ฐ๋จํ ๋ช
๋ น์ ์ ์ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์ํ ๋ณดํธ์ ์ธ ์ธ์ด๋ฅผ ๋ง๋ญ๋๋ค:
npm run dev: ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์์ํฉ๋๋ค.npm run build: ํ๋ก๋์ ์ฉ ๋น๋๋ฅผ ์์ฑํฉ๋๋ค.npm run test: ๋ชจ๋ ์๋ํ๋ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.npm run lint: ๋ฆฐํฐ๋ฅผ ์คํํ์ฌ ์ฝ๋ ํ์ง ๋ฌธ์ ๋ฅผ ํ์ธํฉ๋๋ค.
์ด ๊ฐ๋จํ ๊ด๋ก๋ ์ ์ธ๊ณ ์ด๋์ ์๋ ๊ฐ๋ฐ์๋ ํ๋ก์ ํธ์ ์ฐธ์ฌํ์ฌ ์ด๋ป๊ฒ ์คํํ๊ณ ๊ฒ์ฆํ๋์ง ์ ํํ ์ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ง์์ ํตํฉ & ์ง์์ ๋ฐฐํฌ (CI/CD)
CI/CD๋ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ๊ดํ์ ๋๋ค. CI ์๋ฒ๋ ๊ฐ๋ฐ์๊ฐ ๊ณต์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ฝ๋๋ฅผ ํธ์ํ ๋๋ง๋ค ๋ฏธ๋ฆฌ ์ ์๋ ๋ช ๋ น์ด ์ธํธ๋ฅผ ์๋์ผ๋ก ์คํํฉ๋๋ค. ์ผ๋ฐ์ ์ธ CI ํ์ดํ๋ผ์ธ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
- ์ ์ฝ๋๋ฅผ ์ฒดํฌ์์ํฉ๋๋ค.
- ์์กด์ฑ์ ์ค์นํฉ๋๋ค (์:
pnpm install). - ๋ฆฐํฐ๋ฅผ ์คํํฉ๋๋ค (
npm run lint). - ๋ชจ๋ ์๋ํ๋ ํ
์คํธ๋ฅผ ์คํํฉ๋๋ค (
npm run test). - ๋ชจ๋ ๊ฒ์ด ํต๊ณผ๋๋ฉด, ํ๋ก๋์
๋น๋๋ฅผ ์์ฑํฉ๋๋ค (
npm run build). - (์ง์์ ๋ฐฐํฌ) ์ ๋น๋๋ฅผ ์คํ ์ด์ง ๋๋ ํ๋ก๋์ ํ๊ฒฝ์ ์๋์ผ๋ก ๋ฐฐํฌํฉ๋๋ค.
์ด ํ๋ก์ธ์ค๋ ํ์ง ๊ฒ์ดํธํคํผ ์ญํ ์ ํฉ๋๋ค. ๊นจ์ง ์ฝ๋๊ฐ ๋ณํฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ ์ฒด ํ์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. GitHub Actions, GitLab CI/CD, CircleCI์ ๊ฐ์ ๊ธ๋ก๋ฒ ํ๋ซํผ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋จ์ผ ๊ตฌ์ฑ ํ์ผ ํ๋๋ง์ผ๋ก ์ด๋ฌํ ํ์ดํ๋ผ์ธ์ ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฝ๊ฒ ์ค์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
์ ์ฒด ๊ทธ๋ฆผ: ์ต์ ์ํฌํ๋ก์ฐ ์์
ํ์ ์คํฌ๋ฆฝํธ๋ก ์๋ก์ด React ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ์ด ๊ตฌ์ฑ ์์๋ค์ด ์ด๋ป๊ฒ ํจ๊ป ์๋ํ๋์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค:
- ์ด๊ธฐํ: Vite์ ์ค์บํด๋ฉ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ์์ํฉ๋๋ค:
pnpm create vite my-app --template react-ts. ์ด๋ Vite, React, TypeScript๋ฅผ ์ค์ ํฉ๋๋ค. - ์ฝ๋ ํ์ง: ESLint์ Prettier๋ฅผ ์ถ๊ฐํ๊ณ ๊ตฌ์ฑํฉ๋๋ค. React์ TypeScript์ ํ์ํ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๊ณ ๊ตฌ์ฑ ํ์ผ(
.eslintrc.cjs,.prettierrc)์ ์์ฑํฉ๋๋ค. - ํ ์คํ : ๋จ์ ํ ์คํ ์ ์ํด Vitest๋ฅผ, E2E ํ ์คํ ์ ์ํด Playwright๋ฅผ ๊ฐ๊ฐ์ ์ด๊ธฐํ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐํฉ๋๋ค. ์ปดํฌ๋ํธ์ ์ฌ์ฉ์ ํ๋ฆ์ ๋ํ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์๋ํ:
package.json์scripts๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ฐ๋ฐ ์๋ฒ ์คํ, ๋น๋, ํ ์คํ , ๋ฆฐํ ์ ์ํ ๊ฐ๋จํ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. - CI/CD: GitHub Actions ์ํฌํ๋ก์ฐ ํ์ผ(์:
.github/workflows/ci.yml)์ ์์ฑํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์๋ ๋๋ง๋คlint๋ฐtest์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ํ๊ท(regression)๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด ์ค์ ์ ํตํด ๊ฐ๋ฐ์๋ ๋น ๋ฅธ ํผ๋๋ฐฑ ๋ฃจํ, ์๋ํ๋ ํ์ง ๊ฒ์ฌ, ๊ฒฌ๊ณ ํ ํ ์คํ ์ ์ด์ ์ ๋๋ฆฌ๋ฉฐ ์์ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ ๋์ ํ์ง์ ์ต์ข ์ ํ์ผ๋ก ์ด์ด์ง๋๋ค.
๊ฒฐ๋ก
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ํฌํ๋ก์ฐ๋ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ณ ํ์ง์ ๋ณด์ฅํ๋ ๋ฐ ๊ฐ๊ฐ ์ค์ํ ์ญํ ์ ํ๋ ์ ๋ฌธํ๋ ๋๊ตฌ๋ค์ ์ ๊ตํ ๊ตํฅ๊ณก์ ๋๋ค. pnpm์ผ๋ก ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ๋ถํฐ Vite๋ก ๋ฒ๋ค๋งํ๋ ๊ฒ, ESLint๋ก ํ์ค์ ๊ฐ์ ํ๋ ๊ฒ๋ถํฐ Cypress์ Vitest๋ก ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ๊น์ง, ์ด ์ธํ๋ผ๋ ์ ๋ฌธ์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ง์ํ๋ ๋ณด์ด์ง ์๋ ํ๋ ์์ํฌ์ ๋๋ค.
๊ธ๋ก๋ฒ ํ์๊ฒ ์ด ์ํฌํ๋ก์ฐ๋ฅผ ์ฑํํ๋ ๊ฒ์ ๋จ์ํ ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์๋๋ผ ํจ๊ณผ์ ์ธ ํ์ ๊ณผ ํ์ฅ ๊ฐ๋ฅํ ์์ง๋์ด๋ง์ ๋ฐ๋ก ๊ทธ ๊ธฐ๋ฐ์ ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์ด ์ง์ ์ผ๋ก ์ค์ํ ๊ฒ, ์ฆ ์ ์ธ๊ณ ๊ณ ๊ฐ์ ์ํ ํ๋ฅญํ ์ ํ์ ๋ง๋๋ ๋ฐ ์ง์คํ ์ ์๋๋ก ํ๋ ๊ณตํต์ ์ธ์ด์ ์๋ํ๋ ๋ณด์ฆ ์ฒด๊ณ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ์ธํ๋ผ๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ํ๋ ๋์งํธ ์ธ๊ณ์์ ์ฝ๋์์ ์ ๋ฌธ ์ํํธ์จ์ด ์์ง๋์ด๋ก ์ฑ์ฅํ๋ ์ฌ์ ์ ํต์ฌ ๋จ๊ณ์ ๋๋ค.